#include <iostream>
#include <string>

/*
一般函数的返回值都是右值(放在赋值符号的右边)
但是引用作为函数的返回值时，返回值是一个左值(既可以放在赋值符号的右边，也可以放在左边)
*/
// 引用作为函数的返回值，不能返回局部变量的引用，局部变量在函数调用结束后就被回收了
using namespace std;

// 返回静态变量的引用
int &my_add(int x, int y)
{

	static int temp = x + y; // 静态局部变量
	return temp;
}

// 返回全局变量的引用
int val = 100;
int &func()
{
	return val; // 返回对va的引用
}

int &getElement(int *arr, int index)
{

	return arr[index];
}
int main(int argc, char const *argv[])
{
	cout << my_add(10, 20) << endl;

	int &p = func(); // p绑定到val
	p = 1024;		 // 修改val的值
	cout << val << endl;

	// 通过func()修改val
	func() = 2048;
	cout << val << endl;

	int numbers[] = {415, 526, 2022, 5423};

	getElement(numbers, 2) = 100;

	cout << numbers[2] << endl;

	return 0;
}
